package com.tjetc;

import java.util.ArrayList;
import java.util.List;

public class _5GenericExtends {
    public static void main(String[] args) {
        /*
            泛型继承： 更加具有通用性
            1. <? extends A>: 表示上限
            2. <? super A>: 表示下限
         */

//        List<Object> list = new ArrayList<Integer>();

        // 更多用于参数 这个不能当做一个集合使用
        List<? extends B> list = new ArrayList<>();
//        list.add(new C());
        list.add(null);

        // ?: 未知类型 ？和 Object 只允许放null
        List<?> list1 = new ArrayList<>();
        list1.add(null);

        // 演示上限
        T t = new T();
        List<A> aList = new ArrayList<>();
        t.f(aList);
        List<B> bList = new ArrayList<>();
        t.f(bList);
        List<D> dList = new ArrayList<>();
//        t.f(dList);

        // 演示下限
        T t1 = new T();
        List<C> cList = new ArrayList<>();
        t1.f1(cList);
        t1.f1(bList);
        t1.f1(aList);

        // 演示任意类型
        T t2 = new T();
        t1.f2(aList);
        t1.f(bList);
        t1.f2(cList);
    }
}

class A {}
class B extends A{}
class C extends B{}
class D{}
class T {
    // 演示上限
    void f(List<? extends A> list) {

    }
    // 演示下限
    void f1(List<? super C> list) {

    }

    // 演示任意类型
    void f2(List<?> list){}
}